"use strict";
/*
  多态、抽象类的使用
    多态是面向对象特征之一，面向对象的三大特征 封装 继承 和多态

  多态概念：父类定义一个方法不去实现、让继承它的子类去实现，每一个子类有不同的表现

  抽象类：抽象类也是一种多态形式，但是抽象类的要求是更加的严格的，抽象类要求如下：
    1： 使用 abstract 关键字来定义抽象类，抽象方法
    2.  抽象类是只能是一个基类，也可以理解成是模板，是不能够实例化的
    3.  抽象类的抽象方法也是一样不会有具体的体现，是给子类去实现
    4.  抽象类必须至少需要有一个抽象方法，继承抽象类的子类一定要重写抽象方法
*/
var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var animal = /** @class */ (function () {
    function animal(name) {
        this.name = name;
    }
    animal.prototype.eat = function () {
        console.log('吃的方法');
    };
    return animal;
}());
var dog = /** @class */ (function (_super) {
    __extends(dog, _super);
    function dog(name) {
        return _super.call(this, name) || this;
    }
    dog.prototype.eat = function () {
        console.log(this.name + "\u5403\u9AA8\u5934");
    };
    return dog;
}(animal));
var cat = /** @class */ (function (_super) {
    __extends(cat, _super);
    function cat(name) {
        return _super.call(this, name) || this;
    }
    cat.prototype.eat = function () {
        console.log(this.name + "\u5403\u9C7C");
    };
    return cat;
}(animal));
var bigDog = new dog('哈士奇');
bigDog.eat(); // 哈士奇吃骨头
var smallCat = new cat('小花猫');
smallCat.eat(); //  小花猫吃鱼
var personl = /** @class */ (function () {
    function personl(age) {
        this.age = age;
    }
    return personl;
}());
var students = /** @class */ (function (_super) {
    __extends(students, _super);
    function students(age) {
        return _super.call(this, age) || this;
    }
    students.prototype.getage = function () {
        console.log(this.age + "\u7684\u5E74\u9F84\u662F\u20189784");
    };
    return students;
}(personl));
var teacher = new students('张老师');
teacher.getage(); // 张老师的年龄是‘9784
/*
  总而言之 抽象类就是一个更加严格的多态的体现形式
*/
